" Vim with all enhancements
source $VIMRUNTIME/vimrc_example.vim

" Use the internal diff if available.
" Otherwise use the special 'diffexpr' for Windows.
if &diffopt !~# 'internal'
  set diffexpr=MyDiff()
endif
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg1 = substitute(arg1, '!', '\!', 'g')
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg2 = substitute(arg2, '!', '\!', 'g')
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let arg3 = substitute(arg3, '!', '\!', 'g')
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      if empty(&shellxquote)
        let l:shxq_sav = ''
        set shellxquote&
      endif
      let cmd = '"' . $VIMRUNTIME . '\diff"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  let cmd = substitute(cmd, '!', '\!', 'g')
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
  if exists('l:shxq_sav')
    let &shellxquote=l:shxq_sav
  endif
endfunction




"
"vim congigure
"
"
"一、基本配置
"
:set number
set number

" Display line and column number in bottom ruler.
set ruler

" Activate syntax highlighting.
syntax enable

" Set a nice theme.
color slate

" 不与 Vi 兼容（采用 Vim 自己的操作命令）
set nocompatible

"在底部显示，当前处于命令模式还是插入模式
set showmode

"命令模式下，在底部显示，当前键入的指令。比如，键入的指令是2y3d，那么底部就会显示2y3，当键入d的时候，操作完成，显示消失
set showcmd

" 支持使用鼠标
set mouse=a

"启用256色 
set t_Co=256

"开启文件类型检查，并且载入与该类型对应的缩进规则
"比如，如果编辑的是.py文件，Vim 就是会找 Python 的缩进规则~/.vim/indent/python.vim
filetype indent on


"二、 缩进

"按下回车键后，下一行的缩进会自动跟上一行的缩进保持一致
set autoindent

"按下 Tab 键时，Vim 显示的空格数
set tabstop=2

"在文本上按下>>（增加一级缩进）、<<（取消一级缩进）或者==（取消全部缩进）时，每一级的字符数
set shiftwidth=4

"由于 Tab 键在不同的编辑器缩进不一致，该设置自动将 Tab 转为空格
set expandtab

"Tab 转为多少个空格
set softtabstop=2

"
"三、外观
"
"set number
set number

"显示光标所在的当前行的行号，其他行都为相对于该行的相对行号
"set relativenumber

"光标所在的当前行高亮
set cursorline

"设置行宽，即一行显示多少个字符
set textwidth=80

"自动折行，即太长的行分成几行显示
set wrap

"关闭自动折行
"set nowrap

"只有遇到指定的符号（比如空格、连词号和其他标点符号），才发生折行
"也就是说，不会在单词内部折行
set linebreak

"指定折行处与编辑窗口的右边缘之间空出的字符数
set wrapmargin=2
"set wrapmargin=2

set scrolloff=5
"水平滚动时，光标距离行首或行尾的位置（单位：字符）。该配置在不折行时比较有用
"set sidescrolloff=15

"是否显示状态栏。0 表示不显示，1 表示只在多窗口时显示，2 表示显示
set laststatus=2

"在状态栏显示光标的当前位置（位于哪一行哪一列）
set  ruler

"
"四、搜索
"

"光标遇到圆括号、方括号、大括号时，自动高亮对应的另一个圆括号、方括号和大括号
set showmatch

"搜索时，高亮显示匹配结果
set hlsearch

"输入搜索模式时，每输入一个字符，就自动跳到第一个匹配的结果
set incsearch

"搜索时忽略大小写
set ignorecase

"如果同时打开了ignorecase，那么对于只有一个大写字母的搜索词，将大小写敏感；其他情况都是大小写不敏感
"比如，搜索Test时，将不匹配test；搜索test时，将匹配Test
set smartcase

"
"五、编辑
"

"打开英语单词的拼写检查
" set spell spelllang=en_us

"不创建备份文件
"默认情况下，文件保存时，会额外创建一个备份文件，它的文件名是在原文件名的末尾，再添加一个波浪号（~）
set nobackup

"不创建交换文件
"交换文件主要用于系统崩溃时恢复文件，文件名的开头是.、结尾是.swp
set noswapfile

"保留撤销历史
"Vim会在编辑时保存操作历史，用来供用户撤消更改。
"默认情况下，操作记录只在本次编辑时有效，一旦编辑结束、文件关闭，操作历史就消失了。
"打开这个设置，可以在文件关闭后，操作记录保留在一个文件里面，继续存在。
"这意味着，重新打开一个文件，可以撤销上一次编辑时的操作。撤消文件是跟原文件保存在一起的隐藏文件，文件名以.un~开头
set undofile

"设置备份文件、交换文件、操作历史文件的保存位置
"结尾的//表示生成的文件名带有绝对路径，路径中用%替换目录分隔符，这样可以防止文件重名
set backupdir=~/.vim/.backup//
set directory=~/.vim/.swp//
set undodir=~/.vim/.undo//

"自动切换工作目录。这主要用在一个 Vim
"会话之中打开多个文件的情况，默认的工作目录是打开的第一个文件的目录
"该配置可以将工作目录自动切换到，正在编辑的文件的目录
set autochdir

"出错时，不要发出响声
set noerrorbells

"出错时，发出视觉提示，通常是屏幕闪烁
set visualbell

"Vim 需要记住多少次历史操作
set history=1000

"打开文件监视。如果在编辑过程中文件发生外部改变（比如被别的编辑器编辑了），就会发出提示
set autoread

"如果行尾有多余的空格（包括 Tab 键），该配置将让这些空格显示成可见的小方块
set listchars=tab:»■,trail:■
set list

"命令模式下，底部操作指令按下 Tab 键自动补全。
"第一次按下Tab，会显示所有匹配的操作指令的清单；
"第二次按下 Tab，会依次选择各个指令
set wildmenu
set wildmode=longest:list,full

" encoding是Vim内部使用的字符编码方式，一般设置为utf8
" termencoding是Vim所工作的终端(或者 Windows的Console窗口)的字符编码方式，一般设置为utf8
" fileencodings是Vim自动探测fileencoding的顺序列表，启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式
" 这些设置需要set命令来进行设置生效
set termencoding=utf-8
set encoding=utf8
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030

set pythonthreedll=E:\SoftwaresInstalled\anaconda3\python37.dll


""
"vim congigure
"
"
"一、基本配置
"
:set number

" 不与 Vi 兼容（采用 Vim 自己的操作命令）
set nocompatible

"在底部显示，当前处于命令模式还是插入模式
set showmode

"命令模式下，在底部显示，当前键入的指令。比如，键入的指令是2y3d，那么底部就会显示2y3，当键入d的时候，操作完成，显示消失
set showcmd

" 支持使用鼠标
set mouse=a

"启用256色 
set t_Co=256

"开启文件类型检查，并且载入与该类型对应的缩进规则
"比如，如果编辑的是.py文件，Vim 就是会找 Python 的缩进规则~/.vim/indent/python.vim
filetype indent on


"二、 缩进

"按下回车键后，下一行的缩进会自动跟上一行的缩进保持一致
set autoindent

"按下 Tab 键时，Vim 显示的空格数
set tabstop=2

"在文本上按下>>（增加一级缩进）、<<（取消一级缩进）或者==（取消全部缩进）时，每一级的字符数
set shiftwidth=4

"由于 Tab 键在不同的编辑器缩进不一致，该设置自动将 Tab 转为空格
set expandtab

"Tab 转为多少个空格
set softtabstop=2

"
"三、外观
"
"set number
set number

"显示光标所在的当前行的行号，其他行都为相对于该行的相对行号
"set relativenumber

"光标所在的当前行高亮
set cursorline

"设置行宽，即一行显示多少个字符
set textwidth=80

"自动折行，即太长的行分成几行显示
set wrap

"关闭自动折行
"set nowrap

"只有遇到指定的符号（比如空格、连词号和其他标点符号），才发生折行
"也就是说，不会在单词内部折行
set linebreak

"指定折行处与编辑窗口的右边缘之间空出的字符数
set wrapmargin=2
"set wrapmargin=2

set scrolloff=5
"水平滚动时，光标距离行首或行尾的位置（单位：字符）。该配置在不折行时比较有用
"set sidescrolloff=15

"是否显示状态栏。0 表示不显示，1 表示只在多窗口时显示，2 表示显示
set laststatus=2

"在状态栏显示光标的当前位置（位于哪一行哪一列）
set  ruler

"
"四、搜索
"

"光标遇到圆括号、方括号、大括号时，自动高亮对应的另一个圆括号、方括号和大括号
set showmatch

"搜索时，高亮显示匹配结果
set hlsearch

"输入搜索模式时，每输入一个字符，就自动跳到第一个匹配的结果
set incsearch

"搜索时忽略大小写
set ignorecase

"如果同时打开了ignorecase，那么对于只有一个大写字母的搜索词，将大小写敏感；其他情况都是大小写不敏感
"比如，搜索Test时，将不匹配test；搜索test时，将匹配Test
set smartcase

"
"五、编辑
"

"打开英语单词的拼写检查
" set spell spelllang=en_us

"不创建备份文件
"默认情况下，文件保存时，会额外创建一个备份文件，它的文件名是在原文件名的末尾，再添加一个波浪号（~）
set nobackup

"不创建交换文件
"交换文件主要用于系统崩溃时恢复文件，文件名的开头是.、结尾是.swp
set noswapfile

"保留撤销历史
"Vim会在编辑时保存操作历史，用来供用户撤消更改。
"默认情况下，操作记录只在本次编辑时有效，一旦编辑结束、文件关闭，操作历史就消失了。
"打开这个设置，可以在文件关闭后，操作记录保留在一个文件里面，继续存在。
"这意味着，重新打开一个文件，可以撤销上一次编辑时的操作。撤消文件是跟原文件保存在一起的隐藏文件，文件名以.un~开头
set undofile

"设置备份文件、交换文件、操作历史文件的保存位置
"结尾的//表示生成的文件名带有绝对路径，路径中用%替换目录分隔符，这样可以防止文件重名
set backupdir=~/.vim/.backup//
set directory=~/.vim/.swp//
set undodir=~/.vim/.undo//

"自动切换工作目录。这主要用在一个 Vim
"会话之中打开多个文件的情况，默认的工作目录是打开的第一个文件的目录
"该配置可以将工作目录自动切换到，正在编辑的文件的目录
set autochdir

"出错时，不要发出响声
set noerrorbells

"出错时，发出视觉提示，通常是屏幕闪烁
set visualbell

"Vim 需要记住多少次历史操作
set history=1000

"打开文件监视。如果在编辑过程中文件发生外部改变（比如被别的编辑器编辑了），就会发出提示
set autoread

"如果行尾有多余的空格（包括 Tab 键），该配置将让这些空格显示成可见的小方块
set listchars=tab:»■,trail:■
set list

"命令模式下，底部操作指令按下 Tab 键自动补全。
"第一次按下Tab，会显示所有匹配的操作指令的清单；
"第二次按下 Tab，会依次选择各个指令
set wildmenu
set wildmode=longest:list,full

" encoding是Vim内部使用的字符编码方式，一般设置为utf8
" termencoding是Vim所工作的终端(或者 Windows的Console窗口)的字符编码方式，一般设置为utf8
" fileencodings是Vim自动探测fileencoding的顺序列表，启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式
" 这些设置需要set命令来进行设置生效
set termencoding=utf-8
set encoding=utf8
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030

set pythonthreedll=E:\SoftwaresInstalled\anaconda3\python37.dll


""
"vim congigure
"
"
"一、基本配置
"
:set number

" 不与 Vi 兼容（采用 Vim 自己的操作命令）
set nocompatible

"在底部显示，当前处于命令模式还是插入模式
set showmode

"命令模式下，在底部显示，当前键入的指令。比如，键入的指令是2y3d，那么底部就会显示2y3，当键入d的时候，操作完成，显示消失
set showcmd

" 支持使用鼠标
set mouse=a

"启用256色 
set t_Co=256

"开启文件类型检查，并且载入与该类型对应的缩进规则
"比如，如果编辑的是.py文件，Vim 就是会找 Python 的缩进规则~/.vim/indent/python.vim
filetype indent on


"二、 缩进

"按下回车键后，下一行的缩进会自动跟上一行的缩进保持一致
set autoindent

"按下 Tab 键时，Vim 显示的空格数
set tabstop=2

"在文本上按下>>（增加一级缩进）、<<（取消一级缩进）或者==（取消全部缩进）时，每一级的字符数
set shiftwidth=4

"由于 Tab 键在不同的编辑器缩进不一致，该设置自动将 Tab 转为空格
set expandtab

"Tab 转为多少个空格
set softtabstop=2

"
"三、外观
"
"set number
set number

"显示光标所在的当前行的行号，其他行都为相对于该行的相对行号
"set relativenumber

"光标所在的当前行高亮
set cursorline

"设置行宽，即一行显示多少个字符
set textwidth=80

"自动折行，即太长的行分成几行显示
set wrap

"关闭自动折行
"set nowrap

"只有遇到指定的符号（比如空格、连词号和其他标点符号），才发生折行
"也就是说，不会在单词内部折行
set linebreak

"指定折行处与编辑窗口的右边缘之间空出的字符数
set wrapmargin=2
"set wrapmargin=2

set scrolloff=5
"水平滚动时，光标距离行首或行尾的位置（单位：字符）。该配置在不折行时比较有用
"set sidescrolloff=15

"是否显示状态栏。0 表示不显示，1 表示只在多窗口时显示，2 表示显示
set laststatus=2

"在状态栏显示光标的当前位置（位于哪一行哪一列）
set  ruler

"
"四、搜索
"

"光标遇到圆括号、方括号、大括号时，自动高亮对应的另一个圆括号、方括号和大括号
set showmatch

"搜索时，高亮显示匹配结果
set hlsearch

"输入搜索模式时，每输入一个字符，就自动跳到第一个匹配的结果
set incsearch

"搜索时忽略大小写
set ignorecase

"如果同时打开了ignorecase，那么对于只有一个大写字母的搜索词，将大小写敏感；其他情况都是大小写不敏感
"比如，搜索Test时，将不匹配test；搜索test时，将匹配Test
set smartcase

"
"五、编辑
"

"打开英语单词的拼写检查
" set spell spelllang=en_us

"不创建备份文件
"默认情况下，文件保存时，会额外创建一个备份文件，它的文件名是在原文件名的末尾，再添加一个波浪号（~）
set nobackup

"不创建交换文件
"交换文件主要用于系统崩溃时恢复文件，文件名的开头是.、结尾是.swp
set noswapfile

"保留撤销历史
"Vim会在编辑时保存操作历史，用来供用户撤消更改。
"默认情况下，操作记录只在本次编辑时有效，一旦编辑结束、文件关闭，操作历史就消失了。
"打开这个设置，可以在文件关闭后，操作记录保留在一个文件里面，继续存在。
"这意味着，重新打开一个文件，可以撤销上一次编辑时的操作。撤消文件是跟原文件保存在一起的隐藏文件，文件名以.un~开头
set undofile

"设置备份文件、交换文件、操作历史文件的保存位置
"结尾的//表示生成的文件名带有绝对路径，路径中用%替换目录分隔符，这样可以防止文件重名
set backupdir=~/.vim/.backup//
set directory=~/.vim/.swp//
set undodir=~/.vim/.undo//

"自动切换工作目录。这主要用在一个 Vim
"会话之中打开多个文件的情况，默认的工作目录是打开的第一个文件的目录
"该配置可以将工作目录自动切换到，正在编辑的文件的目录
set autochdir

"出错时，不要发出响声
set noerrorbells

"出错时，发出视觉提示，通常是屏幕闪烁
set visualbell

"Vim 需要记住多少次历史操作
set history=1000

"打开文件监视。如果在编辑过程中文件发生外部改变（比如被别的编辑器编辑了），就会发出提示
set autoread

"如果行尾有多余的空格（包括 Tab 键），该配置将让这些空格显示成可见的小方块
set listchars=tab:»■,trail:■
set list

"命令模式下，底部操作指令按下 Tab 键自动补全。
"第一次按下Tab，会显示所有匹配的操作指令的清单；
"第二次按下 Tab，会依次选择各个指令
set wildmenu
set wildmode=longest:list,full

" encoding是Vim内部使用的字符编码方式，一般设置为utf8
" termencoding是Vim所工作的终端(或者 Windows的Console窗口)的字符编码方式，一般设置为utf8
" fileencodings是Vim自动探测fileencoding的顺序列表，启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式
" 这些设置需要set命令来进行设置生效
set termencoding=utf-8
set encoding=utf8
set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030

set pythonthreedll=E:\SoftwaresInstalled\anaconda3\python37.dll


"
"一键运行代码
"
function CheckPythonSyntax()
    let mp = &makeprg
    let ef = &errorformat
    let exeFile = expand("%:t")
    setlocal makeprg=python\ -u
    set efm=%C\ %.%#,%A\ \ File\ "%f"\,\ line\ %l%.%#,%Z%[%^\ ]%\@=%m
    silent make %
    copen
    " set efm 是设置quickfix的errorformat，以便vim识别
    " makeprg 是vim内置的编译命令，可以通过更改来实现编译对应类型文件。具体可参考vim官方说明文件。
    " copen是打开quickfix，n用来设置quichfix窗口大小，如 cope5。在错误描述上回车，可以直接跳转到错误行。
    let &makeprg = mp
    let &errorformat = ef
endfunction
"一个是普通模式下，一个是插入模式下
" au filetype python map <f5> :w <cr> :call CheckPythonSyntax() <cr>
" au filetype python imap <f5> <esc> :w <cr> :call CheckPythonSyntax()
" <cr></cr></cr></esc></f5></cr></cr></f5>



